package com.ruoyi.member.mapper;

import com.ruoyi.member.domain.MemberWallet;
import org.apache.ibatis.annotations.Param;
import java.math.BigDecimal;
import java.util.List;

/**
 * 会员钱包Mapper接口
 *
 * @author ruoyi
 * @date 2025-01-22
 */
public interface MemberWalletMapper {
    /**
     * 查询会员钱包
     *
     * @param walletId 会员钱包主键
     * @return 会员钱包
     */
    public MemberWallet selectMemberWalletById(Long walletId);

    /**
     * 查询会员钱包列表
     *
     * @param memberWallet 会员钱包
     * @return 会员钱包集合
     */
    public List<MemberWallet> selectMemberWalletList(MemberWallet memberWallet);

    /**
     * 根据会员ID查询钱包
     *
     * @param memberId 会员ID
     * @return 会员钱包
     */
    public MemberWallet selectMemberWalletByMemberId(Long memberId);

    /**
     * 新增会员钱包
     *
     * @param memberWallet 会员钱包
     * @return 结果
     */
    public int insertMemberWallet(MemberWallet memberWallet);

    /**
     * 修改会员钱包
     *
     * @param memberWallet 会员钱包
     * @return 结果
     */
    public int updateMemberWallet(MemberWallet memberWallet);

    /**
     * 删除会员钱包
     *
     * @param walletId 会员钱包主键
     * @return 结果
     */
    public int deleteMemberWalletById(Long walletId);

    /**
     * 批量删除会员钱包
     *
     * @param walletIds 需要删除的数据主键集合
     * @return 结果
     */
    public int deleteMemberWalletByIds(Long[] walletIds);

    /**
     * 充值
     *
     * @param memberId 会员ID
     * @param amount   充值金额
     * @return 结果
     */
    public int recharge(@Param("memberId") Long memberId, @Param("amount") BigDecimal amount);

    /**
     * 扣款
     *
     * @param memberId 会员ID
     * @param amount   扣款金额
     * @return 结果
     */
    public int deduct(@Param("memberId") Long memberId, @Param("amount") BigDecimal amount);

    /**
     * 增加积分
     *
     * @param memberId 会员ID
     * @param points   积分数量
     * @return 结果
     */
    public int addPoints(@Param("memberId") Long memberId, @Param("points") Integer points);

    /**
     * 使用积分
     *
     * @param memberId 会员ID
     * @param points   积分数量
     * @return 结果
     */
    public int usePoints(@Param("memberId") Long memberId, @Param("points") Integer points);

    /**
     * 更新VIP等级
     *
     * @param memberId 会员ID
     * @param vipLevel VIP等级
     * @return 结果
     */
    public int updateVipLevel(@Param("memberId") Long memberId, @Param("vipLevel") Integer vipLevel);
}